package Deque;

import java.util.*;

/**
 * @Auther: MFM
 * @Date: 2021/7/27 - 07 - 27 - 9:40
 * @version: 1.0
 */

public class Test {
    public static void main(String[] args) {
        /*
            1.创建list集合，存储N个学生的身高，生成一个疯狂队列
            2.首先从List集合中，取出一个最大数（最小数），放入到队列中，下次取两个最小的（最大的）
            3.将List集合进行排序，升序排序。依次拿最近的两个数值

         */
        List<Integer> list = Arrays.asList(12, 3, 5, 21, 44, 35, 60,11);
        list.sort((int1, int2) -> {
            if (int1 > int2) {
                return 1;
            }
            return -1;
        });

        LinkedList<Integer> linked = new LinkedList<>();
        for (int i = 0; i < list.size(); i++) {
            linked.add(list.get(i));
        }
        //开始疯狂队列排序
        ArrayDeque<Integer> deque = new ArrayDeque<>();
        deque.add(linked.remove(0));
        boolean getMax = true;//如果是true表示要从集合中取出两个最大数，否则取出两个最小数
        while (linked.size() > 1) {
            int max, min;
            if (getMax) {
                max = linked.remove(linked.size() - 1);
                min = linked.remove(linked.size() - 1);
                getMax = false;
            } else {
                min = linked.remove(0);
                max = linked.remove(0);
                getMax = true;

            }
                deque.addFirst(max);
                deque.addLast(min);

        }

        if (linked.size()>0){
            int value = linked.remove(0);
            if (deque.peekFirst() == deque.peekLast()) {
                deque.addLast(value);
            } else {
                if (getMax){//取大数 最后的数值和最小值在一起
                    if (deque.peekFirst() > deque.peekLast()) {
                        deque.addLast(value);
                    } else {
                        deque.addFirst(value);
                    }
                }else {//取小数 最后的数值和最大值在一起
                    if (deque.peekFirst() > deque.peekLast()) {
                        deque.addFirst(value);
                    } else {
                        deque.addLast(value);
                    }
                }
            }
        }
        System.out.println(deque);
        int max = 0;
        while (deque.size()>1){
            int value = deque.pollFirst();
            max +=Math.abs(value - deque.peekFirst());
        }
        System.out.println(max);

//        boolean num = list.size() % 2 == 0;
//        boolean flag = false;
//
//        int max = 0;
//        int min = 0;
//
//        for (int i = 1; i < list.size(); i++) {
//            if (list.get(i-1)<list.get(i)){
//                max = list.get(i);
//            }
//            for (int j = 0; j < list.size(); j++) {
//                if (list.get(j)==max){
//                    list.remove(j);
//                }
//            }
//        }
//
//        deque.addFirst(max);
//
//        for (int i = 1; i < list.size(); i++) {
//            if (list.get(i-1)<list.get(i)){
//                max = list.get(i);
//            }
//            if (list.get(i-1)>list.get(i)){
//                min = list.get(i);
//            }
//        }
//
//
//        if (flag){
//            deque.addFirst(max);
//        }else if (!flag){
//            deque.addFirst(min);
//        }else {
//        }
//
//        for (int i = 1; i < list.size(); i++) {
//            if (list.get(i-1)<list.get(i)){
//                max = list.get(i);
//            }
//            if (list.get(i-1)>list.get(i)){
//                min = list.get(i);
//            }
//        }
//
//        if (flag){
//            deque.addLast(max);
//            flag = false;
//        }else if (!flag){
//            deque.addLast(min);
//            flag = true;
//        }else {
//        }

    }
}
